package com.kaifamiao.exercises.inner;

public class Queue {

    private Node head; // 用来记录头节点的字段
    private Node tail; // 用来记录尾节点的字段
    private int count; // 表示链表的节点个数

    /**
     * 获取队列中的元素个数
     * @return 返回队列中的元素个数
     */
    public int size(){
        return count;
    }

    /**
     * 向队列尾部追加元素
     * @param item 被追加的元素
     */
    public void add( Object item ) {
        Node node = new Node( item, null );
        // 应该如何将 node 添加到链表中？
    }

    /**
     * 检查队列头部元素(但不删除队列头部元素)
     * @return 返回队列头部元素
     */
    public Object peek(){

        return null;
    }

    /**
     * 删除并返回队列头部元素
     * @return 返回队列头部元素
     */
    public Object poll(){

        return null;
    }

    /**
     * 通过重写从Object继承的toString方法返回当前 Queue实例的 字符串形式
     * @return
     */
    @Override
    public String toString() {
        // 从头到尾遍历链表，将每个节点（Node）的 item 连接到一个字符串中
        return "Queue[]";
    }

    private static class Node {

        Object item; // 用于存放数据的字段
        Node next;// 指向下一个节点的引用变量

        public Node(Object item, Node next) {
            this.item = item;
            this.next = next;
        }

        @Override
        public String toString() {
            return item == null ? "null" : item.toString();
        }
    }
}
